/**
 * @author: dn-jinmin/dn-jinmin
 * @doc: 该文件定义了websocket客户端的配置选项相关功能
 */

package websocket

import "net/http"

// DailOptions 是一个配置选项类型，用于定制websocket客户端的行为
type DailOptions func(option *dailOption)

// dailOption 是websocket客户端的配置选项结构体
type dailOption struct {
	pattern string      // 访问websocket服务的路径模式
	header  http.Header // HTTP请求的头部信息
}

// newDailOptions 创建并返回一个根据给定配置选项初始化的dailOption实例
// 它接受一系列DailOptions函数作为参数，这些函数用于定制dailOption实例
func newDailOptions(opts ...DailOptions) dailOption {
	// 初始化dailOption实例，设置默认值
	o := dailOption{
		pattern: "/ws",
		header:  nil,
	}

	// 遍历每个配置选项函数，应用定制配置
	for _, opt := range opts {
		opt(&o)
	}

	// 返回定制后的dailOption实例
	return o
}

// WithClientPatten 返回一个配置选项函数，用于设置websocket服务的访问路径模式
// 参数pattern: 指定的路径模式
func WithClientPatten(pattern string) DailOptions {
	return func(opt *dailOption) {
		opt.pattern = pattern
	}
}

// WithClientHeader 返回一个配置选项函数，用于设置HTTP请求的头部信息
// 参数header: 指定的HTTP头部信息
func WithClientHeader(header http.Header) DailOptions {
	return func(opt *dailOption) {
		opt.header = header
	}
}
